home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Comms Spectacular / mosaic / Helpers / Sparkle Folder / Docs / README 2nd < prev    next >
Encoding:
Text File  |  1994-07-10  |  26.4 KB  |  520 lines  |  [TEXT/ALFA]

  1. Sparkle: A new mac MPEG player.
  2. -------------------------------
  3. Documents for version 2.1
  4. This document looks best in 9 point monaco.
  5. On an MPW marks aware editor (like Alpha) this document has marks for 
  6. each section.
  7.  
  8. This document contains the following sections:
  9. INTRODUCTION
  10. LEGALITIES
  11. SAVING TO MPEG
  12. FAQs
  13. WHY DOESN'T SPARKLE DO....
  14. SMALL THINGS YOU MIGHT NOT HAVE NOTICED
  15. THE FUTURE
  16. HOW CAN YOU HELP IMPROVE SPARKLE?
  17.  
  18. ------------------------------------------------------------------------------
  19. INTRODUCTION
  20.  
  21. Hi there, friendly users. This is release 2.1 of my mac MPEG player.
  22. Version 1.0 of this code was based on the Berkeley MPEG unix code.
  23. (Anyone who wants to play with the Berkeley code can get it from 
  24. toe.cs.berkeley.edu in pub/multimedia/mpeg.) It was released as soon as 
  25. it was usable. This version has had pretty much all of the Berkeley code 
  26. rewritten for greater speed, smaller memory footprint, and more flexibility.
  27.  
  28. Version 2.0 of this code makes use of the Berkeley MPEG encoder, available 
  29. from the same place as above. Like version 1.0, this Berkeley code has not 
  30. been touched much except to make it Mac aware, object oriented, and thread 
  31. based. As a result, MPEG encoding is slow and a ridiculous memory hog 
  32. (what do you expect from UNIX coders---they seem to have no interest in 
  33. elegant design)? 
  34. As time permits I'll be going through that encoding code to make it faster 
  35. and use less memory.
  36.  
  37. Notice that there is a section of this document called FAQs.
  38. Please read it before sending me mail, thus avoiding wasting your time and 
  39. mine.
  40.  
  41. Please read all of this document before playing with the program. While 
  42. actually using the program is pretty simple, there are a few things you 
  43. should be aware of. Many of you may not care when I waffle on about 
  44. technical details. However I would ask all programmer readers (especially 
  45. people knowledgable about QuickTime, and especially Apple [and 
  46. ex-Apple :-( employees] to look at the tech sections and help me out with 
  47. comments and suggestions. Each time someone gives me a pointer on how to 
  48. do something it cuts a week or more off the release date of the next 
  49. version of Sparkle. 
  50.  
  51. Features:
  52. •    Standard mac interface with menus and windows.
  53. •    Uses the QuickTime movie controller to control the MPEG viewing.
  54. •    MultiFinder friendly, with good backgrounding behavior.
  55. •    Saves MPEGs to QuickTime movies.
  56. •    Can open multiple files at once.
  57. •    Free.
  58.  
  59. To run it needs at least:
  60. •    System 7.
  61. •    QuickTime 1.6
  62. •    A 68020 or better.
  63. •    800K to play one 160x120 MPEG---to open more or large MPEGs increase the
  64.     partition. 
  65.     Encoding MPEGs requires much more memory---about a minimum of 1600K for a 
  66.     160x120 source. 
  67. •    The Thread Manager. Right now, the Thread Manager is an extension 
  68.     that you can get from any friend who knows a lot about macs, or from the 
  69.     apple ftp site. Ftp to ftp.apple.com and look in 
  70.     dts/mac/sys.soft/extensions for Thread_manager_201.hqx
  71.     I wish I could distribute it with Sparkle, but Apple's lawyers won't 
  72.     allow that. 
  73.     (Question for you as a user, does it make your Macintosh experience 
  74.     better or worse to find that a vital piece you need to run a program is 
  75.     not available with that program? Now try to explain that to Apple 
  76.     management, who sometime seem determined to make using a mac as difficult 
  77.     an experience as using a PC.)
  78.     The Thread Manager may be built into System 7.5 when that's released, at 
  79.     which point you won't need the extension.
  80.     
  81. This program works fine, with good handling of errors, on my Quadra 610, but 
  82. that's the only machine I have to test it. If you find a bug that is not 
  83. caused by the various things listed below, please mail me with as many 
  84. details as possible, both about your machine and about what the  program 
  85. was last doing before it died on you.
  86.  
  87. I don't think there's much to say on the use of this program---you pretty 
  88. much run it like any other mac program. There is a section in this 
  89. document on tips that may not be obvious. 
  90. When opening files, you can choose to show all files, or only files with a 
  91. .mpg suffix.
  92. If you choose the "show all files" option and open some random file, don't 
  93. be surprised when you are told that that is not a valid MPEG file.
  94. If you set the option to change file types, the file type of the MPEG file 
  95. you are changing will be changed to a Sparkle file, which will give it a 
  96. nice icon and allow you to open the file by double-clicking on it.
  97.  
  98. Underneath the movie controller for each window is a progress bar which 
  99. will update itself when slow things are happening. If you have a fast 
  100. machine (say a Quadra or Centris) this won't have to update itself much, 
  101. except if you open large (and not too common) MPEGs---say 320x240. If you 
  102. really want to see what the progress update looks like, try having lots of 
  103. MPEGs playing at once, then switch Sparkle into the background. 
  104. If you save an MPEG to QuickTime using Cinepak, your machine may appear to 
  105. freeze while each frame is being converted. I have installed code to 
  106. reduce the extent of the freeze, but basically this is a bug with 
  107. QuickTime---the system just grabs control and won't let go for about five 
  108. seconds. Maybe this'll be fixed in QuickTime 2.0 if we're lucky.
  109.  
  110. I have tested this program extensively under low-memory conditions when it 
  111. opens files and plays them.  It should never crash under those conditions.  
  112. In 600K you can easily open, play and save to QT a 120x160 I-frame MPEG.  In 
  113. 1500K you can open, play and save to QT a 320x240 IBP-frame MPEG.
  114.  
  115. Disk errors in various forms (bad sectors reading an MPEG file, no disk 
  116. space writing an QuickTime file, etc) will not crash, but the system will 
  117. put up an error alert and not handle the error very well (for example you 
  118. won't be given a chance to destroy old files to free up space on a disk). 
  119. Decent recovery from disk errors is on the list of things to do.
  120.  
  121. ------------------------------------------------------------------------------
  122. LEGALITIES
  123.  
  124. This program can be freely distributed.
  125. If you want to include it on a CD-ROM collection, please ask me first, 
  126. but I'll probably allow you.
  127. NOTE: Some authors will not allow their stuff to be distributed on CD-ROMs 
  128. for which people have to pay. I would ask these authors to consider things 
  129. more carefully. Many people (like myself) do not have very good ftp access 
  130. and a CD ROM of stuff is a godsend, even if we do have to pay a little for 
  131. it. Think about it.
  132. The only people I won't allow to carry it are ZiffNet because I feel their 
  133. download policies are unfair. (As I understand things, ZiffNet put up for 
  134. downloading stuff they pull off the InterNet, but won't allow the InterNet 
  135. to distribute their stuff. If I am wrong about this, someone please tell 
  136. me and I'll change this clause.)
  137.  
  138. If you feel a desperate need to thank me for this program, send me a 
  139. floppy of interesting MPEGs or QT movies you've picked up. 
  140. (Please don't e-mail me large files without warning.)
  141. My paper-mail address is 
  142.     Maynard Handley
  143.     ADI
  144.     284 Stuart Street
  145.     Dunedin
  146.     New Zealand
  147.  
  148. ------------------------------------------------------------------------------
  149. SAVING TO MPEG
  150.  
  151. The dialog box offering options when you save to MPEG is not that great 
  152. right now if you don't know what you're doing. I'm sorry---I'll fix it 
  153. when I have time, like everything else.
  154.  
  155. For a better explanation of how MPEG works, read the Technical Notes file 
  156. in this package, but here are rough details.
  157.  
  158. When encoding your MPEG you will need to decide what types of frames you 
  159. want to use. If you want your MPEG to be read widely, ie on PC systems, 
  160. you should consider using only I-frames. The most common MPEG decoder on 
  161. PCs is the Xing decoder which only understands the simple I-frame MPEG 
  162. format. If you want to get the best possible compression you should use 
  163. I, P and B frames, but then your MPEG will only be able to be read by 
  164. smarter decoders. A compromise is to use only I and P frames. This will 
  165. give you a lot of the compression benefit of I, P and B frames, but will 
  166. be faster to encode. 
  167.  
  168. If you don't want to know the details of these frames, choose a frame 
  169. pattern from the popup menu. 
  170. If you want to create your own frame pattern, here are some details:
  171. (If you don't want to create your own frame pattern, ignore these.)
  172. 1) The first frame in the MPEG will always be I. That implicit I frame is 
  173.     displayed in front of the frame pattern text you enter because it is 
  174.     always there and you don't need to put it in. That implicit I frame is 
  175.     only used for the first frame, after that your pattern is repeated as 
  176.     necessary. Thus if your pattern is BBPBBI, the encoder will encode frames 
  177.     using the sequence I BBPBBI BBPBBI BBPBBI ...
  178.     (For people who care about MPEG details, this is the playback order
  179.     of the frames. The actual order of the frames stored in the file 
  180.     will be be I PBBIBB PBBIBB PBBIBB.)
  181. 2) If you are using B frames, you have to start off with two referential 
  182.     frames, the initial I frame then either an I or a P frame.
  183. 3) The last few frames of the MPEG, if they would be B frames, will be 
  184.     converted to I-frames. (If this didn't occur, like in the original 
  185.     Berkeley encoder code before I munged it, you will lose those final 
  186.     frames.)
  187. 4) Don't create too long a pattern of Ps or Bs. You'll start to lose 
  188.     quality and random access into the movie will become more granular. The 
  189.     presets I've given should guide you as to sensible selections.
  190.  
  191. Once you have chosen a frame pattern, you'll need to select the amount of 
  192. compression you want to use. This is set by the I, P and B quantization 
  193. levels. The values the dialogs gives as defaults will usually make sense 
  194. but if you want to change them:
  195. 1) The values are restricted to the range 1 through 31 inclusive.
  196.     A quantization of 1 is the highest quality, a quantization of 31 is the 
  197.     lowest quality.
  198. 2) Normal quality is a quantization of about 8. Low quality is a 
  199.     quantization of about 16. High quality is about 6.
  200.  
  201. You can choose from various algorithms for generating P and B frames. I 
  202. haven't explored these in detail and they may change when I have time to 
  203. look at them. For now the important things to note are 
  204. 1) They all seem to generate about the same quality, and about the same 
  205.     file size.
  206. 2) They are ordered in the menus by speed, with the fastest ones first.
  207. 3) The B-frame exhaustive search will take approx forever to do anything. 
  208.     Try it once to see what I mean, but don't expect to use it for anything 
  209.     useful.
  210. As I explore these more and start diddling the code, I'll provide more 
  211. explanation.
  212.  
  213. If you save to MPEG, because of the non-causal algorithms used by MPEG 
  214. compression, frames are not compressed in the order they are displayed. 
  215. This means that if you are using B-frames and stop the compression before 
  216. it reaches the end of the source movie, the encoder may have queued up 
  217. some frames it needs to compress to make the MPEG file consistent. 
  218. If this is the case, Sparkle will have to encode those queued frame before 
  219. it stops the compression, so it won't stop immediately. 
  220. The message window will tell you how many frames have been queued so you can see 
  221. how things are going. If you have the speech manager installed, Sparkle 
  222. will also tell you how many frames are left, which you may find more 
  223. convenient.
  224.  
  225. You can set the frame rate from a popup menu. When the dialog box opens, 
  226. the frame rate of the MPEG or QT movie you are converting has its frame 
  227. rate read in and used to set the initial frame rate. So usually you won't 
  228. want to change the frame rate. Note that there are a limited set of frame 
  229. rates because MPEG only supports a very few frame rates. So the best one 
  230. possible is chosen.
  231. Note also that frames are laid down with that frame rate which may cause 
  232. the movie to speed up or slow down. No frame interpolation is done to 
  233. ensure that perception remains correct across frame rate variation. 
  234. This'll be changed at some point, but is not a high priority compared to 
  235. sound.
  236.  
  237. ------------------------------------------------------------------------------
  238. FAQs (Frequently asked questions).
  239.  
  240. • I try to play MPEGs but my Mac starts speaking numbers or asks me over and 
  241. over to select a voice.
  242.     You have the Speech Manager installed on your Mac including a little 
  243.     extension called ``Speech Media Handler''. Speech Media Handler speaks
  244.     the text of movies that include a text track, and Sparkle plays MPEGs 
  245.     by creating a dummy text track as part of the process of faking QuickTime 
  246.     into accepting MPEGs. I'd recommend ditching Speech Media Handler. I've 
  247.     never seen a place where it is useful and right now it's kinda a cute toy 
  248.     idea that escaped from Apple. Maybe in a few months they'll give it a 
  249.     programmer interface and make it more useful.
  250.     
  251. • I've downloaded (or uploaded) an MPEG using Mosaic/WWW and when I try to 
  252. play it Sparkle says it's not an MPEG file. But if I ftp the file with 
  253. Fetch or suchlike it works fine. What's happening?
  254.     Be very careful when transferring files over the Internet with MacBinary.
  255.     Fetch and many such programs automatically strip MacBinary from files,
  256.     but Mosaic does not appear to (maybe this will be fixed soon). So 
  257.     if an MPEG is stored at a Mosaic site using MacBinary, all Mosaic users
  258.     trying to download it will have problems.
  259.  
  260. • Why when I try to step back one frame do I sometimes step back 5 or six 
  261. frames?
  262.     You are viewing an MPEG with P or B frames. Because of the way these 
  263.     frames are compressed, it would take a lot of computation (ie be slow) to 
  264.     jump exactly to the frame you want, so I jump to the nearest frame that 
  265.     can be calculated at reasonable speed. If you want to know more, read the 
  266.     technical note in this package.
  267. • Why when I try to random access a frame do I get sent to the same set of 
  268. frame numbers always?
  269.     Same reason as above.
  270.  
  271. • Why does my MPEG have the occasional block of garbage, mostly colored 
  272. green?
  273.     Some part of the MPEG file has become corrupt. This usually happens with 
  274.     MPEG files that have been uuencoded and have had a character or two lost 
  275.     or changed.
  276. • Why are large parts of my MPEG filled with green garbage, or with parts 
  277. of earlier scenes.
  278.     You have probably downloaded the MPEG file using gopher or ftp in ASCII 
  279.     format. The file is now useless. Download it again using BINARY mode. 
  280.     Better still, set your gopher or ftp application always to download .MPG 
  281.     suffix files in BINARY---don't trust its AUTOMATIC mode.
  282. • Why is the first frame of my MPEG all green?
  283.     Some bozos out there (probably PC users) when they create an MPEG file, 
  284.     randomly start it where they feel like it. 
  285.     The consequence is that the first some bytes of the file are garbage and 
  286.     appear as an all green first frame. 
  287.     If you have one of these MPEGs, whenever you jump to the first frame, you 
  288.     won't see the first frame, but simply the last frame you were looking at. This 
  289.     is a consequence of the way Sparkle handles errors in the MPEG file format. 
  290.     Mostly it works well, but in this particular case it isn't great.
  291.     It is not too easy to work around this because of the many different ways in which
  292.     the MPEG can have garbage at the start before valid data begins.
  293.  
  294. • Why at the end of an MPEG is the last frame the same as the second to 
  295. last frame?
  296.     Some MPEGs just are created this way, with the last two frames as 
  297.     duplicates. This is a problem with those files, not a bug in Sparkle, and 
  298.     one just has to accept it. 
  299.     A similar type problem is that some video that's been converted to 30fps 
  300.     from 24fps film has duplicate frames every so often, and agin one just 
  301.     has to accept this for now.
  302.  
  303. • What does the Thread Manager do? Why do you make such a fuss over it?
  304.     The Thread Manager provides a way for a programmer to create a number of 
  305.     tasks within an application and have those tasks all run together. So 
  306.     with Sparkle every time the user asks for something that will takes some 
  307.     time, like playing an MPEG or saving a file in some different format, I 
  308.     create a task that does that work. If the Thread Manager isn't present, 
  309.     you, the user, can't create a number of these tasks and switch between 
  310.     them---you are restricted to doing only one thing at a time.
  311.  
  312. • When I started saving a file to MPEG, it got through two frames then sat there
  313. doing nothing for a long long time. Did it crash?
  314.     Especially when saving to MPEG, Sparkle creates a large number of blocks 
  315.     of memory. If the mac runs out of memory partway through performing 
  316.     this saving, it will run around trying everything it can to scrounge memory.
  317.     On my Quadra 610 I have seen it sit there for 45 seconds trying to free up 
  318.     memory before it concludes that there's nothing it can do and pops up an
  319.     error message. I guess on slower machines it might sit there for up to two
  320.     minutes. Just be patient and wait a while before concluding things
  321.     have crashed.
  322.  
  323. • Will you create a PowerPC native version? A version that uses the DSP in 
  324. the AV macs?
  325.     I don't have a PPC or an AV mac, and unless someone buys me one, I won't 
  326.     have either for sometime. Maybe when Symantec offer a Think C 7 that 
  327.     compiles to PowerPC, someone out there with a PowerPC will be able to 
  328.     do the compile for me. Until then, I'm afraid this is all that I can do.
  329.  
  330. • Where can I get MPEG files?
  331.     The only site I know of is toe.cs.berkeley.edu in pub/multimedia. I don't 
  332.     have very good net access at present so I can't hunt for other sites. If 
  333.     you find other sites, tell me, and I'll add them to this list.
  334.     
  335. • Where can I find more about MPEG?
  336.     Read the UseNet MPEG FAQ. This is published in news.answers every so 
  337.     often, and can be ftp'd as         
  338.         host: ftp.cs.tu-berlin.de
  339.         file: /pub/msdos/windows3/graphics/mpegfaXX.zip
  340.     (XX is a version number).
  341.      Yeah, it's a zip file and that sucks, but that's life. There are a bunch 
  342.      of mac deZip'ers around so grab one and use it.
  343.      There's also a version of this, I seem to remember in text format, at 
  344.          toe.cs.berkeley.edu in pub/multimedia/mpeg.
  345.      The latest version of this file as of January 94 to be 3.0.
  346.  
  347. • How can I deal with AVI files?
  348.     There is a program at the sumex-aim.stanford.edu ftp site, in 
  349.     info-mac/grf/util/avi-to-qt-converter.hqx that claims to do this.
  350.     The AVI codec part of it appears to work OK, but I don't know about the 
  351.     rest of it because I have no access to AVI files. I've heard some people 
  352.     recommend it, and one guy say it crashed on his machine.
  353.  
  354. • Do I know of a program that ...?
  355.     Not really. 
  356.     I know of no Mac program that handles MPEG sound, or MPEGs with a .WAV 
  357.     file. There is source code floating around that converts MPEG sound to 
  358.     and from 16bit 44.2kHz samples, but it does not deal with MPEG 
  359.     video/audio synching and thus isn't yet of much use.
  360.     I know of no Mac program that can play windows AVI files.
  361.     My next major task is handling sound. 
  362.     But until I am done with that, I'm afraid you're out of luck.
  363.  
  364. ------------------------------------------------------------------------------
  365. WHY DOESN'T SPARKLE DO...
  366.  
  367. •    Why doesn't Sparkle read .gl, .dl and .fli files?
  368. One reason is that those file formats are awful. They give these dinky 
  369. low contrast horribly dithered images no-one would want to look at, and 
  370. they usually only have about 10 frames. Maybe, years from now, I'll add 
  371. those conversions, but they're about as low a priority as you get.
  372.  
  373. •    What about audio?
  374. MPEG has audio compression as well as video compression. I do not really 
  375. understand how the audio compression works. That is, I have the MPEG 
  376. standard that explains the bit patterns used and such, but I don't 
  377. understand the overall ideas behind the encoding. I don't think I can do 
  378. a good job in terms of high speed, good quality, low memory usage and 
  379. such, unless I have such an understanding.
  380. Does anyone out there have any references on how the MPEG psycho-acoustic 
  381. coding works? Technical journals, books, elementary or advanced 
  382. treatments. I don't care what you suggest---anything is better than my 
  383. present zero knowledge.
  384.  
  385. •    What about Video for Windows?
  386. I would be nice to support .AVI files. But right now I know nothing about 
  387. .AVI beyond the fact that it exists. Again any info anyone has is 
  388. appreciated. Until I know how .AVI works, how it fits into the windows 
  389. environment etc, I can't even tell you if it's practical for Sparkle to 
  390. try to support .AVI, let alone start the necessary coding.
  391.  
  392. •    Why don't you write an MPEG codec?
  393. It is not yet clear to me that an MPEG codec has any particular use.
  394. As far as the MPEG algorithm goes, my code is not yet fast enough to give 
  395. real video, even on quadras. For a 120x160 movie I get 1 fps on my SE/30. 
  396. While I hope to get at least twice that as I continue to revise the code, 
  397. I don't think I can get much beyond it. The best I could ever get if I 
  398. wrote in pure assembly is 4 fps (the JPEG codec rate) which isn't really 
  399. good enough. 
  400. Next the MPEG file structure is rather different from the QuickTime file 
  401. structure in the way that different pieces of data are tagged and 
  402. synchronised. Things would not be like the JPEG codec where a program can 
  403. slap a short header onto a JPEG file, feed it to the JPEG codec and have 
  404. a usable picture. The program would still have to know a lot about the 
  405. MPEG file structure to use the codec, so the whole point of the codec as 
  406. being usable by programs that don't know the compression algorithm 
  407. details is lost.
  408. Also I suspect the way MPEG uses forward image prediction in B-frames 
  409. will cause QuickTime problems both with buffer allocation (where will the 
  410. future predictive frames be stored) and in random access.
  411.  
  412. So for now I think a separate MPEG<->QT program is most useful. Of course 
  413. when Sparkle is maxed out as an application (and when QuickTime has 
  414. evolved more) I may reconsider the issue, but it won't happen soon.
  415.  
  416. •    Will I make the source available? 
  417. Yes, at some point. I had hoped to do so this release, but while the code 
  418. is 95% clean and readable, it's still not perfect, and don't yet think 
  419. it would help anyone much.
  420.  
  421. ------------------------------------------------------------------------------
  422. SMALL THINGS YOU MIGHT NOT HAVE NOTICED
  423.  
  424. The movie controller behaves pretty much like a standard QT controller. 
  425. You can step forward and backwards, hold down those buttons to play 
  426. forwards or backwards and click or drag in the central region to go to a 
  427. random point. 
  428. You can use the forward and backward arrow keys to step. 
  429. You can option click in the forward and backward steppers to go to the 
  430. beginning or end of the MPEG. Likewise using option forward or backward 
  431. arrow.
  432. You can start the movie playing using either return, spacebar, or 
  433. command forward arrow. You can stop playing using spacebar or return.
  434. You can yet play backwards by using command backward arrow. 
  435.  
  436. The visual clue that the movie is being saved is that 
  437. the movie controller loses its steppers. This is not a particularly 
  438. obvious fact and may at some point be changed. For now it works once you 
  439. realize this fact.
  440.  
  441. When a movie is being saved, you can either stop the conversion 
  442. or pause it. To stop the conversion, use command-S (or the equivalent 
  443. menu option.) This will save the movie using the frames created so far.
  444. To pause the conversion use command-P, or the equivalent menu option, or 
  445. click on the movie controller's play/pause button. The  
  446. saving will stop until you start that movie playing again. This is 
  447. occasionally useful if you want to pause a cinepak conversion to do a 
  448. short job on your mac.
  449.  
  450. If you are partway through a movie and save, the movie will be 
  451. rewound to the beginning for you. You do not need to be at the start of a 
  452. movie to save.
  453.  
  454. You can set the temporal quality options when saving to QuickTime 
  455. separately from the spatial quality options. If you need to do this, hold 
  456. down the option key while using the quality slider, and it will become a 
  457. temporal quality slider. 
  458.  
  459. ------------------------------------------------------------------------------
  460. THE FUTURE
  461.  
  462. The basic outline for now is
  463.     2.5 Cleaned up faster, smaller version of 2.0.
  464.     3.0 Handles sound.
  465.     3.5 Cleaned up faster, smaller version of 3.0.
  466. While adding these large additions I'll fix small things as I go, and as 
  467. I have time. I don't see the user interface improving much for some 
  468. time---more important things need my time.
  469.  
  470. I also want to add stuff to allow us to create movies. Morphs, special 
  471. effects, that sort of thing.
  472.  
  473. ------------------------------------------------------------------------------
  474. HOW CAN YOU HELP IMPROVE SPARKLE?
  475.  
  476. •    Any info on psycho-acoustic encoding?
  477. •    Any info on MicroSoft Video for Windows?
  478. •    Assembly code for IDCT, or a way to access the JPEG codec's IDCT code.
  479. •    Why is QuickTime so slow about creating text track movies? If you have 
  480.     code that creates text track movies fast, please show it to me.
  481. •    Any bug reports.
  482. •    Any ideas you have or suggestions. Your suggestions may go onto the 
  483.     list of things to do (currently two pages of single line items) but will 
  484.     probably be acted upon at some point. People have suggested several 
  485.     things to me I would not have thought of myself, so I do want your 
  486.     feedback.
  487. ------------------------------------------------------------------------------
  488. THANKS
  489.  
  490.     Many people all over the internet have helped me write this code.
  491.     Thanks to the people at Berkeley. Even though I'm gradually destroying 
  492. their code as I replace it with my own, they helped get this project 
  493. started.
  494.     Thanks to the people at Stanford whose code I hope to start using real 
  495. soon now.
  496.     Thanks to various usenet personalities who answered mac programming 
  497. questions, mailed me quicktime header files and such. Special thanks to 
  498. ldo in New Zealand, and Jon W{tte in Sweden, and bryanw, keeper of the 
  499. MPEG FAQ, who mailed me about the Stanford MPEG encoder.
  500.     A special individual thank you goes to DS (he didn't want me to give his 
  501. name but he knows who he is.) DS mailed me a CD ROM and ten floppies of 
  502. information about QuickTime components after I complained that Apple was 
  503. not making this information easily available. Already that knowledge has 
  504. helped this version of Sparkle handle update events much better---no more 
  505. flashes of images. Once I add random access to the code, his help will 
  506. really come into its own.
  507.     Thanks to Apple for making the greatest computers in the world. 
  508. (Though sadly they seem to be going completely clueless with regard to 
  509. how to distribute their various new ideas. I fear if they don't get their 
  510. act together about this soon, NO-ONE will support these new things 
  511. because developers will have no idea whose machine has what on it.)
  512.     Thanks also to Symantec for creating such a great programming environment.
  513. This program was written with Think C 5, then Think C 6  and now Think C 7 using 
  514. the Think Class Library. Having coded on Windows, X-windows, and the Mac, 
  515. I can unreservedly say that the Mac is by far the most pleasant platform for a 
  516. programmer.
  517.  
  518. Maynard Handley 
  519. maynard@elwing.otago.ac.nz
  520. July 10 1994